package juego.util;

import java.awt.Point;
import java.awt.Rectangle;

public class AABB {
	
	private Rectangle BB;
	
	public AABB(int x,int y, int ancho, int alto) {
		this.BB = new Rectangle(x, y, ancho, alto);
	}
	
	public Point getCentro() {
		return new Point((int)BB.getCenterX(), (int)BB.getCenterY());		
	}
	
	public double getMitadAncho() {
		return BB.getWidth() / 2;
	}
	
	public double getMitadAlto() {
		return BB.getHeight() / 2;
	}
	
	/**
	 * Devuelve un Vector2D que contiene la penetracion, del objeto en otro objeto AABB.
	 * El sentido de las componentes de dicho vector es el sentido en el que se debe mover el objeto
	 * para corregir la colision (por lo general solo hace falta la menor de las componentes (Separated
	 * Axis Theorem), pero se devuelven ambas para una mayor versatilidad).
	 * @param aabb Otro objeto AABB.
	 * @return Vector2D con la penetracion en X e Y.
	 */
	public Vector2D getPenetracion(AABB aabb) {
		int signoX, signoY;
		int superposicionX, superposicionY;
		
		// Calculamos la superposicion en cada eje
		superposicionX = (int) ((getMitadAncho() + aabb.getMitadAncho()) - (Math.abs(getCentro().getX() - Math.abs(aabb.getCentro().getX()))));
		superposicionY = (int) ((getMitadAlto() + aabb.getMitadAlto()) - (Math.abs(getCentro().getY() - Math.abs(aabb.getCentro().getY()))));
		// Comprobamos si hay colision
		if ((superposicionX > 0) && (superposicionY > 0)) {
			// Calculamos el sentido del vector en X e Y
			if (getCentro().getX() < aabb.getCentro().getX()) {
				signoX = -1;
			} else {
				signoX = 1;
			}
			if (getCentro().getY() < aabb.getCentro().getY()) {
				signoY = -1;
			} else {
				signoY = 1;
			}
			return new Vector2D(signoX * superposicionX, signoY * superposicionY);
		}
		return new Vector2D(0, 0);
	}

	public Rectangle getBB() {
		return BB;
	}

	public void setBB(Rectangle bB) {
		BB = bB;
	}
	
}
